#include <cstring>
#include <memory>

std::unique_ptr<char[]> my_strdup(const char *s) {
  if (s == nullptr)
    return std::unique_ptr<char[]>(nullptr);

  // 计算字符串长度
  size_t len = strlen(s);

  // 用智能指针管理分配的内存
  std::unique_ptr<char[]> str(new char[len + 1]);

  // 拷贝字符串s
  strcpy(str.get(), s);

  // 返回分配的新字符串
  return str;
}

int main() {
  auto p = my_strdup("bert");

  // ...
  // 使用p

  // 使用者什么都不需要做，无须担心内存泄漏
  return 0;
}